from sqlalchemy import func
from sqlmodel import select


def paginated(query, session, page: int = 1, page_size: int = 10):
    """
    实现查询结果的分页功能。

    :param query: 待执行的查询语句对象。
    :param session: 数据库会话对象。
    :param page: 当前页码，默认为1。
    :param page_size: 每页记录数，默认为10。
    :return: 包含总记录数、当前页码、每页记录数和数据的字典。
    """
    # 计算偏移量，用于跳过前面的记录
    offset = (page - 1) * page_size

    # 执行计数查询，获取总记录数
    total_count = session.exec(select(func.count()).select_from(query)).one()

    # 执行分页查询，获取当前页的数据
    page_dict = session.exec(query.offset(offset).limit(page_size)).all()

    # 返回包含分页信息和数据的字典
    return {
        "total": total_count,
        "page": page,
        "page_size": page_size,
        "data": page_dict
    }
